Opanuj tworzenie Pandas DataFrame. Ten przewodnik obejmuje inicjalizacj臋 DataFrames ze s艂ownik贸w, list, tablic NumPy i innych dla globalnych profesjonalist贸w danych.
Tworzenie Pandas DataFrame: Dog艂臋bne spojrzenie na inicjalizacj臋 struktur danych
Witaj w 艣wiecie manipulacji danymi za pomoc膮 Pythona! W sercu niemal ka偶dego zadania analizy danych le偶y biblioteka Pandas, a jej kamieniem w臋gielnym jest DataFrame. Pomy艣l o DataFrame jako o inteligentnej, pot臋偶nej i elastycznej wersji arkusza kalkulacyjnego lub tabeli bazy danych, 偶yj膮cej bezpo艣rednio w Twoim 艣rodowisku Pythona. Jest to podstawowe narz臋dzie do czyszczenia, transformowania, analizowania i wizualizowania danych. Ale zanim wykonasz kt贸r膮kolwiek z tych operacji, musisz najpierw opanowa膰 sztuk臋 tworzenia DataFrame. Spos贸b inicjalizacji tej fundamentalnej struktury danych mo偶e ustawi膰 scen臋 dla ca艂ej Twojej analizy.
Ten obszerny przewodnik zosta艂 zaprojektowany dla globalnej publiczno艣ci pocz膮tkuj膮cych i praktykuj膮cych analityk贸w danych, naukowc贸w i in偶ynier贸w. Zbadamy najpopularniejsze i najpot臋偶niejsze metody tworzenia Pandas DataFrames od podstaw. Niezale偶nie od tego, czy Twoje dane znajduj膮 si臋 w s艂owniku, li艣cie, tablicy NumPy czy w innym formacie, ten artyku艂 dostarczy Ci wiedzy i praktycznych przyk艂ad贸w, aby inicjalizowa膰 DataFrames z pewno艣ci膮 i efektywno艣ci膮. Zbudujmy nasze fundamenty.
Czym dok艂adnie jest Pandas DataFrame?
Zanim zaczniemy budowa膰, wyja艣nijmy, co konstruujemy. Pandas DataFrame to dwuwymiarowa, zmienna rozmiarowo i potencjalnie heterogeniczna tabelaryczna struktura danych. Roz艂贸偶my to na czynniki pierwsze:
- Dwuwymiarowy: Posiada wiersze i kolumny, tak jak arkusz kalkulacyjny.
- Zmienny rozmiarowo: Mo偶esz dodawa膰 lub usuwa膰 wiersze i kolumny po utworzeniu DataFrame.
- Heterogeniczny: Kolumny mog膮 zawiera膰 r贸偶ne typy danych. Na przyk艂ad jedna kolumna mo偶e zawiera膰 liczby (ca艂kowite lub zmiennoprzecinkowe), inna tekst (ci膮gi znak贸w), a trzecia daty lub warto艣ci logiczne (Prawda/Fa艂sz).
DataFrame sk艂ada si臋 z trzech g艂贸wnych komponent贸w:
- Dane: Rzeczywiste warto艣ci przechowywane w strukturze, zorganizowane w wiersze i kolumny.
- Indeks: Etykiety dla wierszy. Je艣li nie podasz indeksu, Pandas utworzy domy艣lny, zaczynaj膮c od 0. Indeks zapewnia pot臋偶ny spos贸b dost臋pu do danych i ich wyr贸wnywania.
- Kolumny: Etykiety dla kolumn. S膮 one kluczowe dla dost臋pu do konkretnych serii danych w obr臋bie DataFrame.
Zrozumienie tej struktury jest kluczowe dla efektywnego tworzenia i manipulowania DataFrames.
Podstawy: Importowanie Pandas
Przede wszystkim. Aby u偶ywa膰 Pandas, musisz zaimportowa膰 bibliotek臋 do swojego skryptu lub notatnika Pythona. Powszechnie przyj臋t膮 konwencj膮, stosowan膮 przez profesjonalist贸w na ca艂ym 艣wiecie, jest importowanie jej z aliasem pd. Ten prosty alias sprawia, 偶e Tw贸j kod jest bardziej czytelny i zwi臋z艂y.
import pandas as pd
import numpy as np # Cz臋sto u偶ywany razem z Pandas, wi臋c zaimportujemy go r贸wnie偶.
Dzi臋ki tej jednej linii odblokowa艂e艣 pe艂n膮 moc biblioteki Pandas. Teraz przejd藕my do sedna tego przewodnika: tworzenia DataFrames.
Podstawowe metody tworzenia: Od prostych do z艂o偶onych
Konstruktor pd.DataFrame() jest niezwykle wszechstronny. Mo偶e przyjmowa膰 wiele r贸偶nych typ贸w danych wej艣ciowych. Teraz zbadamy najbardziej podstawowe metody, przechodz膮c od najcz臋艣ciej u偶ywanych do bardziej specjalistycznych przypadk贸w.
1. Tworzenie DataFrame ze s艂ownika list lub tablic
Jest to prawdopodobnie najcz臋stsza i najbardziej intuicyjna metoda tworzenia DataFrame. Zaczynasz od s艂ownika Pythona, gdzie klucze stan膮 si臋 nazwami kolumn, a warto艣ci b臋d膮 listami (lub tablicami NumPy lub seriami Pandas) zawieraj膮cymi dane dla ka偶dej kolumny.
Jak to dzia艂a: Pandas mapuje ka偶dy klucz s艂ownika do nag艂贸wka kolumny i ka偶d膮 list臋 warto艣ci do wierszy tej kolumny. Kluczowym wymogiem jest to, 偶e wszystkie listy musz膮 mie膰 t臋 sam膮 d艂ugo艣膰, poniewa偶 ka偶da lista reprezentuje pe艂n膮 kolumn臋 danych.
Przyk艂ad:
Utw贸rzmy DataFrame zawieraj膮cy informacje o r贸偶nych miastach na 艣wiecie.
# Data organized by column
city_data = {
'City': ['Tokyo', 'Delhi', 'Shanghai', 'S茫o Paulo', 'Mumbai'],
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
# Create the DataFrame
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
Wynik:
City Country Population_Millions Is_Coastal
0 Tokyo Japan 37.3 True
1 Delhi India 32.0 False
2 Shanghai China 28.5 True
3 S茫o Paulo Brazil 22.4 False
4 Mumbai India 20.9 True
Kluczowa wskaz贸wka: Ta metoda jest idealna, gdy Twoje dane s膮 naturalnie zorganizowane wed艂ug cech lub kategorii. Jest czytelna, klarowna i bezpo艣rednio przek艂ada struktur臋 Twojego s艂ownika na format tabelaryczny.
2. Tworzenie DataFrame z listy s艂ownik贸w
Alternatywn膮 i r贸wnie pot臋偶n膮 metod膮 jest u偶ycie listy, gdzie ka偶dy element jest s艂ownikiem. W tej strukturze ka偶dy s艂ownik reprezentuje pojedynczy wiersz, a jego klucze reprezentuj膮 nazwy kolumn dla danych tego wiersza.
Jak to dzia艂a: Pandas iteruje po li艣cie. Dla ka偶dego s艂ownika tworzy nowy wiersz. Klucze s艂ownika s膮 u偶ywane do okre艣lania kolumn. Ta metoda jest niezwykle elastyczna, poniewa偶 je艣li w s艂owniku brakuje klucza, Pandas automatycznie wype艂ni t臋 kom贸rk臋 w odpowiednim wierszu warto艣ci膮 NaN (Not a Number), kt贸ra jest standardowym znacznikiem brakuj膮cych danych w Pandas.
Przyk艂ad:
Przedstawmy te same dane miast, ale tym razem w formie listy rekord贸w.
# Data organized by row (record)
records_data = [
{'City': 'Tokyo', 'Country': 'Japan', 'Population_Millions': 37.3, 'Is_Coastal': True},
{'City': 'Delhi', 'Country': 'India', 'Population_Millions': 32.0, 'Is_Coastal': False},
{'City': 'Shanghai', 'Country': 'China', 'Population_Millions': 28.5},
{'City': 'S茫o Paulo', 'Country': 'Brazil', 'Population_Millions': 22.4, 'Is_Coastal': False},
{'City': 'Cairo', 'Country': 'Egypt', 'Timezone': 'EET'} # Note the different structure
]
# Create the DataFrame
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
Wynik:
City Country Population_Millions Is_Coastal Timezone
0 Tokyo Japan 37.3 True NaN
1 Delhi India 32.0 False NaN
2 Shanghai China 28.5 NaN NaN
3 S茫o Paulo Brazil 22.4 False NaN
4 Cairo Egypt NaN NaN EET
Zauwa偶, jak Pandas elegancko poradzi艂 sobie z niesp贸jno艣ciami. Warto艣膰 'Is_Coastal' dla Szanghaju to NaN, poniewa偶 brakowa艂o jej w s艂owniku. Nowa kolumna 'Timezone' zosta艂a utworzona dla Kairu, z warto艣ci膮 NaN dla wszystkich pozosta艂ych miast. To czyni j膮 doskona艂ym wyborem do pracy z danymi p贸艂strukturalnymi, takimi jak odpowiedzi JSON z API.
Kluczowa wskaz贸wka: U偶yj tej metody, gdy Twoje dane s膮 seri膮 rekord贸w lub obserwacji. Jest ona wytrzyma艂a w obs艂udze brakuj膮cych danych i r贸偶nic w strukturze rekord贸w.
3. Tworzenie DataFrame z tablicy NumPy
Dla tych, kt贸rzy pracuj膮 w obliczeniach naukowych, uczeniu maszynowym lub w jakiejkolwiek dziedzinie obejmuj膮cej intensywne operacje numeryczne, dane cz臋sto pochodz膮 z tablic NumPy. Pandas jest zbudowany na NumPy, co sprawia, 偶e integracja mi臋dzy nimi jest p艂ynna i bardzo wydajna.
Jak to dzia艂a: Przekazujesz dwuwymiarow膮 tablic臋 NumPy do konstruktora pd.DataFrame(). Domy艣lnie Pandas utworzy indeksy i kolumny oparte na liczbach ca艂kowitych. Mo偶esz jednak (i powiniene艣) dostarczy膰 znacz膮ce etykiety za pomoc膮 parametr贸w index i columns.
Przyk艂ad:
Utw贸rzmy DataFrame z losowo wygenerowanej tablicy NumPy o wymiarach 5x4, reprezentuj膮cej odczyty czujnik贸w w czasie.
# Create a 5x4 NumPy array with random data
data_np = np.random.rand(5, 4)
# Define column and index labels
columns = ['Sensor_A', 'Sensor_B', 'Sensor_C', 'Sensor_D']
index = pd.to_datetime(['2023-10-27 10:00', '2023-10-27 10:01', '2023-10-27 10:02', '2023-10-27 10:03', '2023-10-27 10:04'])
# Create the DataFrame
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
Wynik (Twoje losowe liczby b臋d膮 si臋 r贸偶ni膰):
Sensor_A Sensor_B Sensor_C Sensor_D
2023-10-27 10:00:00 0.123456 0.987654 0.555555 0.111111
2023-10-27 10:01:00 0.234567 0.876543 0.666666 0.222222
2023-10-27 10:02:00 0.345678 0.765432 0.777777 0.333333
2023-10-27 10:03:00 0.456789 0.654321 0.888888 0.444444
2023-10-27 10:04:00 0.567890 0.543210 0.999999 0.555555
W tym przyk艂adzie wprowadzili艣my r贸wnie偶 pot臋偶n膮 funkcj臋: u偶ycie DatetimeIndex dla danych szereg贸w czasowych, co odblokowuje szeroki wachlarz mo偶liwo艣ci analizy opartej na czasie w Pandas.
Kluczowa wskaz贸wka: Jest to najbardziej efektywna pod wzgl臋dem pami臋ci metoda tworzenia DataFrame z jednorodnych danych numerycznych. Jest to standardowy wyb贸r podczas interfejsowania z bibliotekami takimi jak NumPy, Scikit-learn lub TensorFlow.
4. Tworzenie DataFrame z listy list
Ta metoda jest koncepcyjnie podobna do tworzenia z tablicy NumPy, ale u偶ywa standardowych list Pythona. Jest to prosty spos贸b na konwersj臋 danych tabelarycznych przechowywanych w zagnie偶d偶onym formacie listy.
Jak to dzia艂a: Dostarczasz list臋, gdzie ka偶da wewn臋trzna lista reprezentuje wiersz danych. Podobnie jak w przypadku tablic NumPy, zdecydowanie zaleca si臋 okre艣lenie nazw kolumn za pomoc膮 parametru columns dla jasno艣ci.
Przyk艂ad:
# Data as a list of rows
product_data = [
['P001', 'Laptop', 1200.00, 'Electronics'],
['P002', 'Mouse', 25.50, 'Electronics'],
['P003', 'Desk Chair', 150.75, 'Furniture'],
['P004', 'Keyboard', 75.00, 'Electronics']
]
# Define column names
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# Create the DataFrame
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
Wynik:
ProductID ProductName Price_USD Category 0 P001 Laptop 1200.00 Electronics 1 P002 Mouse 25.50 Electronics 2 P003 Desk Chair 150.75 Furniture 3 P004 Keyboard 75.00 Electronics
Kluczowa wskaz贸wka: Jest to prosta i skuteczna metoda, gdy Twoje dane s膮 ju偶 ustrukturyzowane jako lista wierszy, na przyk艂ad podczas odczytu z formatu pliku, kt贸ry nie ma nag艂贸wk贸w.
Zaawansowana inicjalizacja: Dostosowywanie DataFrame
Opr贸cz dostarczania surowych danych, konstruktor pd.DataFrame() oferuje kilka parametr贸w do kontrolowania struktury i w艂a艣ciwo艣ci nowego DataFrame od momentu jego utworzenia.
Okre艣lanie indeksu
Widzieli艣my ju偶 w akcji parametr `index`. Indeks jest kluczow膮 cz臋艣ci膮 DataFrame, dostarczaj膮c etykiet dla wierszy, kt贸re s膮 u偶ywane do szybkich wyszukiwa艅, wyr贸wnywania danych i wielu innych. Chocia偶 Pandas udost臋pnia domy艣lny indeks numeryczny (0, 1, 2, ...), ustawienie znacz膮cego indeksu mo偶e znacznie u艂atwi膰 prac臋 z danymi.
Przyk艂ad: U偶yjmy ponownie naszego przyk艂adu s艂ownika list, ale ustawmy kolumn臋 `City` jako indeks podczas tworzenia.
city_data = {
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
city_names = ['Tokyo', 'Delhi', 'Shanghai', 'S茫o Paulo', 'Mumbai']
# Create the DataFrame with a custom index
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
Wynik:
Country Population_Millions Is_Coastal
Tokyo Japan 37.3 True
Delhi India 32.0 False
Shanghai China 28.5 True
S茫o Paulo Brazil 22.4 False
Mumbai India 20.9 True
Teraz mo偶esz uzyska膰 dost臋p do danych wierszy, u偶ywaj膮c tych znacz膮cych etykiet, na przyk艂ad za pomoc膮 df_with_index.loc['Tokyo'].
Kontrolowanie typ贸w danych (`dtype`)
Pandas jest do艣膰 dobry w wnioskowaniu typ贸w danych (np. rozpoznawaniu liczb, tekstu i warto艣ci logicznych). Czasami jednak trzeba wymusi膰 konkretny typ danych dla kolumny, aby zapewni膰 efektywno艣膰 pami臋ci lub umo偶liwi膰 okre艣lone operacje. Parametr `dtype` daje Ci t臋 kontrol臋.
Przyk艂ad: Wyobra藕my sobie, 偶e mamy identyfikatory produkt贸w, kt贸re wygl膮daj膮 jak liczby, ale powinny by膰 traktowane jako tekst (ci膮gi znak贸w).
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# Create DataFrame while specifying a dtype for 'ProductID'
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
Wynik:
ProductID object Stock int32 dtype: object
Zauwa偶, 偶e `str` w Pandas jest reprezentowany jako `object`. Jawne ustawienie `dtype` zapobiega traktowaniu `ProductID` przez Pandas jako liczby, co mog艂oby prowadzi膰 do niepoprawnych oblicze艅 lub problem贸w z sortowaniem w przysz艂o艣ci. U偶ywanie bardziej specyficznych typ贸w ca艂kowitych, takich jak `int32` zamiast domy艣lnego `int64`, mo偶e r贸wnie偶 zaoszcz臋dzi膰 znaczn膮 ilo艣膰 pami臋ci przy du偶ych zbiorach danych.
Praktyczne scenariusze i najlepsze praktyki
Wyb贸r odpowiedniej metody tworzenia zale偶y od oryginalnego formatu Twoich danych. Oto prosty przewodnik decyzyjny:
- Czy Twoje dane s膮 w kolumnach (np. jedna lista na cech臋)? U偶yj s艂ownika list. Pasuje to naturalnie.
- Czy Twoje dane to seria rekord贸w (np. z API JSON)? U偶yj listy s艂ownik贸w. Doskonale radzi sobie z brakuj膮cymi lub dodatkowymi polami w rekordach.
- Czy Twoje dane s膮 numeryczne i w siatce (np. z oblicze艅 naukowych)? U偶yj tablicy NumPy. Jest to najbardziej wydajna opcja dla tego przypadku u偶ycia.
- Czy Twoje dane s膮 w prostym formacie tabelarycznym wiersz po wierszu bez nag艂贸wk贸w? U偶yj listy list i dostarcz nazwy kolumn oddzielnie.
Cz臋ste pu艂apki, kt贸rych nale偶y unika膰
- Nier贸wne d艂ugo艣ci w s艂owniku list: To cz臋sty b艂膮d. Podczas tworzenia DataFrame ze s艂ownika list, ka偶da lista musi mie膰 dok艂adnie tak膮 sam膮 liczb臋 element贸w. W przeciwnym razie Pandas zg艂osi `ValueError`. Zawsze upewnij si臋, 偶e dane w kolumnach maj膮 r贸wn膮 d艂ugo艣膰 przed utworzeniem.
- Ignorowanie indeksu: Opieranie si臋 na domy艣lnym indeksie bazuj膮cym na 0 jest w wielu przypadkach w porz膮dku, ale je艣li Twoje dane maj膮 naturalny identyfikator (taki jak ID Produktu, ID U偶ytkownika lub konkretny znacznik czasu), ustawienie go jako indeksu od pocz膮tku mo偶e upro艣ci膰 Tw贸j kod p贸藕niej.
- Zapominanie o typach danych: Pozwalanie Pandas na wnioskowanie typ贸w dzia艂a przez wi臋kszo艣膰 czasu, ale w przypadku du偶ych zbior贸w danych lub kolumn z mieszanymi typami, wydajno艣膰 mo偶e ucierpie膰. B膮d藕 proaktywny w ustawianiu `dtype` dla kolumn, kt贸re maj膮 by膰 traktowane jako kategorie, ci膮gi znak贸w lub okre艣lone typy numeryczne, aby zaoszcz臋dzi膰 pami臋膰 i zapobiec b艂臋dom.
Poza inicjalizacj膮: Tworzenie DataFrames z plik贸w
Chocia偶 ten przewodnik koncentruje si臋 na tworzeniu DataFrames z obiekt贸w Pythona w pami臋ci, kluczowe jest, aby wiedzie膰, 偶e w wi臋kszo艣ci scenariuszy w 艣wiecie rzeczywistym Twoje dane b臋d膮 pochodzi膰 z zewn臋trznego pliku. Pandas zapewnia zestaw wysoce zoptymalizowanych funkcji odczytu do tego celu, w tym:
pd.read_csv(): Dla plik贸w warto艣ci oddzielonych przecinkami, jest to si艂a robocza importu danych.pd.read_excel(): Do odczytu danych z arkuszy kalkulacyjnych Microsoft Excel.pd.read_json(): Do odczytu danych z plik贸w lub ci膮g贸w JSON.pd.read_sql(): Do odczytu wynik贸w zapytania do bazy danych bezpo艣rednio do DataFrame.pd.read_parquet(): Do odczytu z wydajnego, kolumnowego formatu pliku Parquet.
Te funkcje s膮 kolejnym logicznym krokiem w Twojej podr贸偶y z Pandas. Opanowanie ich pozwoli Ci na pobieranie danych praktycznie z dowolnego 藕r贸d艂a do pot臋偶nej struktury DataFrame.
Podsumowanie: Twoje fundamenty dla mistrzostwa danych
Pandas DataFrame to centralna struktura danych dla ka偶dej powa偶nej pracy z danymi w Pythonie. Jak widzieli艣my, Pandas oferuje elastyczny i intuicyjny zestaw narz臋dzi do inicjalizacji tych struktur z szerokiej gamy format贸w. Rozumiej膮c, jak utworzy膰 DataFrame ze s艂ownik贸w, list i tablic NumPy, zbudowa艂e艣 solidne fundamenty dla swoich projekt贸w analizy danych.
Kluczem jest wybranie metody, kt贸ra najlepiej pasuje do oryginalnej struktury Twoich danych. To nie tylko sprawia, 偶e Tw贸j kod jest czystszy i bardziej czytelny, ale tak偶e bardziej wydajny. St膮d jeste艣 gotowy, aby przej艣膰 do ekscytuj膮cych zada艅 czyszczenia, eksploracji, transformacji i wizualizacji danych. Udanej pracy!